/***********************************************************************

	This file is part of KEEL-software, the Data Mining tool for regression, 
	classification, clustering, pattern mining and so on.

	Copyright (C) 2004-2010
	
	F. Herrera (herrera@decsai.ugr.es)
    L. Sanchez (luciano@uniovi.es)
    J. Alcala-Fdez (jalcala@decsai.ugr.es)
    S. Garcia (sglopez@ujaen.es)
    A. Fernandez (alberto.fernandez@ujaen.es)
    J. Luengo (julianlm@decsai.ugr.es)

	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program.  If not, see http://www.gnu.org/licenses/
  
**********************************************************************/

package keel.GraphInterKeel.datacf.exportData;

import keel.GraphInterKeel.datacf.util.FileUtils;
import keel.GraphInterKeel.datacf.util.OptionsDialog;
import keel.GraphInterKeel.datacf.util.KeelFileFilter;
import keel.GraphInterKeel.util.Path;
import java.awt.CardLayout;
import java.awt.Cursor;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.DefaultListModel;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import keel.Algorithms.Preprocess.Converter.KeelToCsv;
import keel.Algorithms.Preprocess.Converter.KeelToDb;
import keel.Algorithms.Preprocess.Converter.KeelToDif;
import keel.Algorithms.Preprocess.Converter.KeelToExcel;
import keel.Algorithms.Preprocess.Converter.KeelToHtml;
import keel.Algorithms.Preprocess.Converter.KeelToPrn;
import keel.Algorithms.Preprocess.Converter.KeelToPropertyList;
import keel.Algorithms.Preprocess.Converter.KeelToTxt;
import keel.Algorithms.Preprocess.Converter.KeelToUci;
import keel.Algorithms.Preprocess.Converter.KeelToWeka;
import keel.Algorithms.Preprocess.Converter.KeelToXml;

/**
 * <p>
 * @author Written by  Pedro Antonio Gutiérrez and Juan Carlos Fernández(University of Córdoba) 23/10/2008
 * @version 1.0
 * @since JDK1.5
 * </p>
 */
public class ExportPanel extends javax.swing.JPanel {

    /**
     * <p>
     * Panel for exporting datasets
     * </p>
     */

    /**
     * <p>
     * Constructor that initializes the panel
     * </p>
     */
    public ExportPanel() {
        initComponents();
    }

    /**
     * <p>
     * This method is called from within the constructor to
     * initialize the form.
     * </p>
     * <p>
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     * </p>
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        exportSelectPanel = new javax.swing.JPanel();
        exportSelectMainPanel = new javax.swing.JPanel();
        nextSelectDatasetButton = new javax.swing.JButton();
        datasetIcon = new javax.swing.JLabel();
        nextSelectPartitionsButton = new javax.swing.JButton();
        partitionsIcon = new javax.swing.JLabel();
        exportSeparator = new javax.swing.JSeparator();
        exportDatasetLabel = new javax.swing.JLabel();
        exportPartitionsLabel = new javax.swing.JLabel();
        exportBrowserPanel = new javax.swing.JPanel();
        buttonPanel = new javax.swing.JPanel();
        optionsButton = new javax.swing.JButton();
        outputFormatLabel = new javax.swing.JLabel();
        outputFormatComboBox = new javax.swing.JComboBox();
        backBrowserButton = new javax.swing.JButton();
        nextBrowserButton = new javax.swing.JButton();
        fileBrowserPanel = new keel.GraphInterKeel.datacf.util.FileBrowserPanel();
        KeelFileFilter fileFilter = new KeelFileFilter();
        fileFilter.addExtension("dat");
        fileFilter.setFilterName("KEEL Files (.dat)");
        fileBrowserPanel.getFileChooser().addChoosableFileFilter(fileFilter);
        exportPreviewPanel = new javax.swing.JPanel();
        mainPanel = new javax.swing.JPanel();
        leftPreviewPanel = new javax.swing.JPanel();
        originalScrollPanel = new javax.swing.JScrollPane();
        originalTextArea = new javax.swing.JTextArea();
        originalSeparator = new javax.swing.JSeparator();
        originalLabel = new javax.swing.JLabel();
        rightPreviewPanel = new javax.swing.JPanel();
        resultScrollPanel = new javax.swing.JScrollPane();
        resultTextArea = new javax.swing.JTextArea();
        resultSeparator = new javax.swing.JSeparator();
        resultsLabel = new javax.swing.JLabel();
        informationPartitionsLabel = new javax.swing.JLabel();
        nextPreviewButton = new javax.swing.JButton();
        backPreviewButton = new javax.swing.JButton();
        exportPartitionsPanel = new javax.swing.JPanel();
        mainPartitionsPanel = new javax.swing.JPanel();
        informationLabel = new javax.swing.JLabel();
        nextPartitionsButton = new javax.swing.JButton();
        backPartitionsButton = new javax.swing.JButton();
        trainingPanel = new javax.swing.JPanel();
        trainingScrollPanel = new javax.swing.JScrollPane();
        trainingList = new JList(trainingModel);
        testingPanel = new javax.swing.JPanel();
        testingScrollPanel = new javax.swing.JScrollPane();
        testingList = new JList(testingModel);
        cleanButton = new javax.swing.JButton();
        trainingButtons = new javax.swing.JPanel();
        addTrainingButton = new javax.swing.JButton();
        removeTrainingButton = new javax.swing.JButton();
        testingButtons = new javax.swing.JPanel();
        addTestingButton = new javax.swing.JButton();
        removeTestingButton = new javax.swing.JButton();
        outputFormatPartitionsPanel = new javax.swing.JPanel();
        optionsPartitionsButton = new javax.swing.JButton();
        outputFormatPartitionsComboBox = new javax.swing.JComboBox();
        outputFormatPartitionsLabel = new javax.swing.JLabel();
        fileBrowserPanel1 = new keel.GraphInterKeel.datacf.util.FileBrowserPanel();
        fileBrowserPanel1 = new keel.GraphInterKeel.datacf.util.FileBrowserPanel();
        fileFilter = new KeelFileFilter();
        fileFilter.addExtension("dat");
        fileFilter.setFilterName("KEEL Files (.dat)");
        fileBrowserPanel1.getFileChooser().addChoosableFileFilter(fileFilter);
        fileBrowserPanel1.getFileChooser().setMultiSelectionEnabled(true);

        setName("Form"); // NOI18N
        setLayout(new java.awt.CardLayout());

        exportSelectPanel.setMinimumSize(new java.awt.Dimension(638, 300));
        exportSelectPanel.setName("exportSelectPanel"); // NOI18N
        exportSelectPanel.setLayout(new java.awt.GridBagLayout());

        exportSelectMainPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Select Export Option"));
        exportSelectMainPanel.setName("exportSelectMainPanel"); // NOI18N
        exportSelectMainPanel.setLayout(new java.awt.GridBagLayout());

        nextSelectDatasetButton.setText("Next->");
        nextSelectDatasetButton.setToolTipText("Export Dataset");
        nextSelectDatasetButton.setMaximumSize(new java.awt.Dimension(100, 100));
        nextSelectDatasetButton.setMinimumSize(new java.awt.Dimension(88, 30));
        nextSelectDatasetButton.setName("nextSelectDatasetButton"); // NOI18N
        nextSelectDatasetButton.setPreferredSize(new java.awt.Dimension(88, 30));
        nextSelectDatasetButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                nextSelectDatasetButtonActionPerformed(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 10, 0);
        exportSelectMainPanel.add(nextSelectDatasetButton, gridBagConstraints);

        datasetIcon.setIcon(new javax.swing.ImageIcon(getClass().getResource("/keel/GraphInterKeel/resources/ico/datacf/exportDataset.png"))); // NOI18N
        datasetIcon.setName("datasetIcon"); // NOI18N
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.insets = new java.awt.Insets(10, 5, 0, 0);
        exportSelectMainPanel.add(datasetIcon, gridBagConstraints);

        nextSelectPartitionsButton.setText("Next->");
        nextSelectPartitionsButton.setToolTipText("Export Partitions");
        nextSelectPartitionsButton.setMaximumSize(new java.awt.Dimension(100, 100));
        nextSelectPartitionsButton.setMinimumSize(new java.awt.Dimension(88, 30));
        nextSelectPartitionsButton.setName("nextSelectPartitionsButton"); // NOI18N
        nextSelectPartitionsButton.setPreferredSize(new java.awt.Dimension(88, 30));
        nextSelectPartitionsButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                nextSelectPartitionsButtonActionPerformed(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 10, 0);
        exportSelectMainPanel.add(nextSelectPartitionsButton, gridBagConstraints);

        partitionsIcon.setIcon(new javax.swing.ImageIcon(getClass().getResource("/keel/GraphInterKeel/resources/ico/datacf/exportPartitions.png"))); // NOI18N
        partitionsIcon.setName("partitionsIcon"); // NOI18N
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.insets = new java.awt.Insets(10, 5, 0, 0);
        exportSelectMainPanel.add(partitionsIcon, gridBagConstraints);

        exportSeparator.setOrientation(javax.swing.SwingConstants.VERTICAL);
        exportSeparator.setName("exportSeparator"); // NOI18N
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridheight = 3;
        gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 8, 0);
        exportSelectMainPanel.add(exportSeparator, gridBagConstraints);

        exportDatasetLabel.setText("<html><b>Export Dataset</b><hr>Select this option if you want to export only a single file from KEEL format to other format.</html>");
        exportDatasetLabel.setVerticalAlignment(javax.swing.SwingConstants.TOP);
        exportDatasetLabel.setMinimumSize(new java.awt.Dimension(250, 200));
        exportDatasetLabel.setName("exportDatasetLabel"); // NOI18N
        exportDatasetLabel.setPreferredSize(new java.awt.Dimension(250, 200));
        exportDatasetLabel.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 5);
        exportSelectMainPanel.add(exportDatasetLabel, gridBagConstraints);

        exportPartitionsLabel.setText("<html><b>Export Partitions</b><hr>Select this option if you have partitions in KEEL format and you want to export them to other format.</html>");
        exportPartitionsLabel.setVerticalAlignment(javax.swing.SwingConstants.TOP);
        exportPartitionsLabel.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        exportPartitionsLabel.setMinimumSize(new java.awt.Dimension(250, 200));
        exportPartitionsLabel.setName("exportPartitionsLabel"); // NOI18N
        exportPartitionsLabel.setPreferredSize(new java.awt.Dimension(250, 200));
        exportPartitionsLabel.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0);
        exportSelectMainPanel.add(exportPartitionsLabel, gridBagConstraints);

        exportSelectPanel.add(exportSelectMainPanel, new java.awt.GridBagConstraints());

        add(exportSelectPanel, "Select");

        exportBrowserPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Export Dataset"));
        exportBrowserPanel.setName("exportBrowserPanel"); // NOI18N
        exportBrowserPanel.setLayout(new java.awt.GridBagLayout());

        buttonPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Output Format"));
        buttonPanel.setName("buttonPanel"); // NOI18N

        optionsButton.setText("Options");
        optionsButton.setToolTipText("Click to configure the options of this format");
        optionsButton.setMinimumSize(new java.awt.Dimension(88, 30));
        optionsButton.setName("optionsButton"); // NOI18N
        optionsButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                optionsButtonActionPerformed(evt);
            }
        });

        outputFormatLabel.setText("Select Output Format");
        outputFormatLabel.setName("outputFormatLabel"); // NOI18N

        outputFormatComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Keel to CSV", "Keel to TXT", "Keel to PRN", "Keel to C4.5", "Keel to Excel", "Keel to Dif", "Keel to PropertyList", "Keel to Weka", "Keel to XML", "Keel to HTML Tab" }));
        outputFormatComboBox.setToolTipText("Select Output Format");
        outputFormatComboBox.setName("outputFormatComboBox"); // NOI18N
        exportOptionsDialog = new OptionsDialog(parent, true);
        exportOptionsDialog.addProperty("Separator",",");
        exportOptionsDialog.addProperty("Null Value","");
        outputFormatComboBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                outputFormatComboBoxItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout buttonPanelLayout = new javax.swing.GroupLayout(buttonPanel);
        buttonPanel.setLayout(buttonPanelLayout);
        buttonPanelLayout.setHorizontalGroup(
            buttonPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(buttonPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(outputFormatLabel)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(outputFormatComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(optionsButton, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(285, Short.MAX_VALUE))
        );
        buttonPanelLayout.setVerticalGroup(
            buttonPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(buttonPanelLayout.createSequentialGroup()
                .addGroup(buttonPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(outputFormatLabel)
                    .addComponent(outputFormatComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(optionsButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
        gridBagConstraints.weightx = 1.0;
        exportBrowserPanel.add(buttonPanel, gridBagConstraints);

        backBrowserButton.setText("<-Back");
        backBrowserButton.setToolTipText("Return to previous window for selecting import option");
        backBrowserButton.setMaximumSize(new java.awt.Dimension(100, 100));
        backBrowserButton.setMinimumSize(new java.awt.Dimension(88, 30));
        backBrowserButton.setName("backBrowserButton"); // NOI18N
        backBrowserButton.setPreferredSize(new java.awt.Dimension(88, 30));
        backBrowserButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                backBrowserButtonActionPerformed(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.ipadx = 10;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gridBagConstraints.weightx = 0.5;
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 10);
        exportBrowserPanel.add(backBrowserButton, gridBagConstraints);

        nextBrowserButton.setText("Next->");
        nextBrowserButton.setToolTipText("Preview exported file");
        nextBrowserButton.setMaximumSize(new java.awt.Dimension(100, 100));
        nextBrowserButton.setMinimumSize(new java.awt.Dimension(88, 30));
        nextBrowserButton.setName("nextBrowserButton"); // NOI18N
        nextBrowserButton.setPreferredSize(new java.awt.Dimension(88, 30));
        nextBrowserButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                nextBrowserButtonActionPerformed(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.ipadx = 10;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.weightx = 0.5;
        gridBagConstraints.insets = new java.awt.Insets(0, 10, 0, 0);
        exportBrowserPanel.add(nextBrowserButton, gridBagConstraints);

        fileBrowserPanel.setName("fileBrowserPanel"); // NOI18N
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        exportBrowserPanel.add(fileBrowserPanel, gridBagConstraints);

        add(exportBrowserPanel, "Browser");

        exportPreviewPanel.setName("exportPreviewPanel"); // NOI18N
        exportPreviewPanel.setLayout(new java.awt.GridLayout(1, 0));

        mainPanel.setMinimumSize(new java.awt.Dimension(600, 190));
        mainPanel.setName("mainPanel"); // NOI18N
        mainPanel.setLayout(new java.awt.GridBagLayout());

        leftPreviewPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        leftPreviewPanel.setMaximumSize(new java.awt.Dimension(10000000, 10000000));
        leftPreviewPanel.setMinimumSize(new java.awt.Dimension(300, 124));
        leftPreviewPanel.setName("leftPreviewPanel"); // NOI18N

        originalScrollPanel.setName("originalScrollPanel"); // NOI18N

        originalTextArea.setEditable(false);
        originalTextArea.setMaximumSize(new java.awt.Dimension(999999999, 999999999));
        originalTextArea.setMinimumSize(new java.awt.Dimension(260, 260));
        originalTextArea.setName("originalTextArea"); // NOI18N
        originalScrollPanel.setViewportView(originalTextArea);

        originalSeparator.setName("originalSeparator"); // NOI18N

        originalLabel.setText("Original File (KEEL format)");
        originalLabel.setName("originalLabel"); // NOI18N

        javax.swing.GroupLayout leftPreviewPanelLayout = new javax.swing.GroupLayout(leftPreviewPanel);
        leftPreviewPanel.setLayout(leftPreviewPanelLayout);
        leftPreviewPanelLayout.setHorizontalGroup(
            leftPreviewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(leftPreviewPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(leftPreviewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(originalSeparator, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 344, Short.MAX_VALUE)
                    .addGroup(leftPreviewPanelLayout.createSequentialGroup()
                        .addGroup(leftPreviewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(originalScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 332, Short.MAX_VALUE)
                            .addGroup(leftPreviewPanelLayout.createSequentialGroup()
                                .addComponent(originalLabel)
                                .addGap(0, 173, Short.MAX_VALUE)))
                        .addContainerGap())))
        );
        leftPreviewPanelLayout.setVerticalGroup(
            leftPreviewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(leftPreviewPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(originalLabel)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(originalSeparator, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(originalScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 351, Short.MAX_VALUE)
                .addContainerGap())
        );

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 0.5;
        gridBagConstraints.weighty = 1.0;
        gridBagConstraints.insets = new java.awt.Insets(10, 0, 0, 0);
        mainPanel.add(leftPreviewPanel, gridBagConstraints);

        rightPreviewPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        rightPreviewPanel.setMaximumSize(new java.awt.Dimension(10000000, 10000000));
        rightPreviewPanel.setMinimumSize(new java.awt.Dimension(300, 124));
        rightPreviewPanel.setName("rightPreviewPanel"); // NOI18N

        resultScrollPanel.setName("resultScrollPanel"); // NOI18N

        resultTextArea.setEditable(false);
        resultTextArea.setMaximumSize(new java.awt.Dimension(999999999, 999999999));
        resultTextArea.setMinimumSize(new java.awt.Dimension(260, 260));
        resultTextArea.setName("resultTextArea"); // NOI18N
        resultScrollPanel.setViewportView(resultTextArea);

        resultSeparator.setName("resultSeparator"); // NOI18N

        resultsLabel.setText("Exported File");
        resultsLabel.setName("resultsLabel"); // NOI18N

        javax.swing.GroupLayout rightPreviewPanelLayout = new javax.swing.GroupLayout(rightPreviewPanel);
        rightPreviewPanel.setLayout(rightPreviewPanelLayout);
        rightPreviewPanelLayout.setHorizontalGroup(
            rightPreviewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, rightPreviewPanelLayout.createSequentialGroup()
                .addGroup(rightPreviewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(resultSeparator, javax.swing.GroupLayout.DEFAULT_SIZE, 344, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, rightPreviewPanelLayout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(rightPreviewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(resultScrollPanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 332, Short.MAX_VALUE)
                            .addComponent(resultsLabel, javax.swing.GroupLayout.Alignment.LEADING))))
                .addContainerGap())
        );
        rightPreviewPanelLayout.setVerticalGroup(
            rightPreviewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(rightPreviewPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(resultsLabel)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(resultSeparator, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(resultScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 351, Short.MAX_VALUE)
                .addContainerGap())
        );

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 0.5;
        gridBagConstraints.weighty = 1.0;
        gridBagConstraints.insets = new java.awt.Insets(10, 0, 0, 0);
        mainPanel.add(rightPreviewPanel, gridBagConstraints);

        informationPartitionsLabel.setText("This is a previsualization of the result of exporting the files you have given");
        informationPartitionsLabel.setName("informationPartitionsLabel"); // NOI18N
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
        gridBagConstraints.ipadx = 10;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.insets = new java.awt.Insets(7, 6, 2, 0);
        mainPanel.add(informationPartitionsLabel, gridBagConstraints);

        nextPreviewButton.setText("Save");
        nextPreviewButton.setToolTipText("Save the exported files");
        nextPreviewButton.setMaximumSize(new java.awt.Dimension(100, 100));
        nextPreviewButton.setMinimumSize(new java.awt.Dimension(88, 30));
        nextPreviewButton.setName("nextPreviewButton"); // NOI18N
        nextPreviewButton.setPreferredSize(new java.awt.Dimension(88, 30));
        nextPreviewButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                nextPreviewButtonActionPerformed(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.ipadx = 10;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.weightx = 0.5;
        gridBagConstraints.insets = new java.awt.Insets(0, 10, 0, 0);
        mainPanel.add(nextPreviewButton, gridBagConstraints);

        backPreviewButton.setText("<-Back");
        backPreviewButton.setToolTipText("Return to select files");
        backPreviewButton.setMaximumSize(new java.awt.Dimension(100, 100));
        backPreviewButton.setMinimumSize(new java.awt.Dimension(88, 30));
        backPreviewButton.setName("backPreviewButton"); // NOI18N
        backPreviewButton.setPreferredSize(new java.awt.Dimension(88, 30));
        backPreviewButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                backPreviewButtonActionPerformed(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.ipadx = 10;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gridBagConstraints.weightx = 0.5;
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 10);
        mainPanel.add(backPreviewButton, gridBagConstraints);

        exportPreviewPanel.add(mainPanel);

        add(exportPreviewPanel, "Preview");

        exportPartitionsPanel.setName("exportPartitionsPanel"); // NOI18N

        mainPartitionsPanel.setName("mainPartitionsPanel"); // NOI18N
        mainPartitionsPanel.setPreferredSize(new java.awt.Dimension(800, 800));
        mainPartitionsPanel.setLayout(new java.awt.GridBagLayout());

        informationLabel.setText("Export Partitions:");
        informationLabel.setName("informationLabel"); // NOI18N
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridwidth = 3;
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
        gridBagConstraints.ipadx = 10;
        gridBagConstraints.ipady = 5;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        mainPartitionsPanel.add(informationLabel, gridBagConstraints);

        nextPartitionsButton.setText("Next->");
        nextPartitionsButton.setToolTipText("Preview exported files");
        nextPartitionsButton.setMaximumSize(new java.awt.Dimension(100, 100));
        nextPartitionsButton.setMinimumSize(new java.awt.Dimension(88, 30));
        nextPartitionsButton.setName("nextPartitionsButton"); // NOI18N
        nextPartitionsButton.setPreferredSize(new java.awt.Dimension(88, 30));
        nextPartitionsButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                nextPartitionsButtonActionPerformed(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 4;
        gridBagConstraints.gridy = 4;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        mainPartitionsPanel.add(nextPartitionsButton, gridBagConstraints);

        backPartitionsButton.setText("<-Back");
        backPartitionsButton.setToolTipText("Return to previous window for selecting export option");
        backPartitionsButton.setMaximumSize(new java.awt.Dimension(100, 100));
        backPartitionsButton.setMinimumSize(new java.awt.Dimension(88, 30));
        backPartitionsButton.setName("backPartitionsButton"); // NOI18N
        backPartitionsButton.setPreferredSize(new java.awt.Dimension(88, 30));
        backPartitionsButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                backPartitionsButtonActionPerformed(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 3;
        gridBagConstraints.gridy = 4;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        mainPartitionsPanel.add(backPartitionsButton, gridBagConstraints);

        trainingPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Training Files"));
        trainingPanel.setName("trainingPanel"); // NOI18N

        trainingScrollPanel.setName("trainingScrollPanel"); // NOI18N

        trainingList.setName("trainingList"); // NOI18N
        trainingScrollPanel.setViewportView(trainingList);

        javax.swing.GroupLayout trainingPanelLayout = new javax.swing.GroupLayout(trainingPanel);
        trainingPanel.setLayout(trainingPanelLayout);
        trainingPanelLayout.setHorizontalGroup(
            trainingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(trainingPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(trainingScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 159, Short.MAX_VALUE)
                .addContainerGap())
        );
        trainingPanelLayout.setVerticalGroup(
            trainingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(trainingPanelLayout.createSequentialGroup()
                .addComponent(trainingScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 150, Short.MAX_VALUE)
                .addContainerGap())
        );

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 3;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 0.2;
        gridBagConstraints.weighty = 0.5;
        mainPartitionsPanel.add(trainingPanel, gridBagConstraints);

        testingPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Test Files"));
        testingPanel.setName("testingPanel"); // NOI18N

        testingScrollPanel.setName("testingScrollPanel"); // NOI18N

        testingList.setName("testingList"); // NOI18N
        testingScrollPanel.setViewportView(testingList);

        javax.swing.GroupLayout testingPanelLayout = new javax.swing.GroupLayout(testingPanel);
        testingPanel.setLayout(testingPanelLayout);
        testingPanelLayout.setHorizontalGroup(
            testingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(testingPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(testingScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 159, Short.MAX_VALUE)
                .addContainerGap())
        );
        testingPanelLayout.setVerticalGroup(
            testingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(testingPanelLayout.createSequentialGroup()
                .addComponent(testingScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 151, Short.MAX_VALUE)
                .addContainerGap())
        );

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 3;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 0.2;
        gridBagConstraints.weighty = 0.5;
        mainPartitionsPanel.add(testingPanel, gridBagConstraints);

        cleanButton.setText("Clean");
        cleanButton.setToolTipText("Clean training and test file");
        cleanButton.setMaximumSize(new java.awt.Dimension(100, 100));
        cleanButton.setMinimumSize(new java.awt.Dimension(88, 30));
        cleanButton.setName("cleanButton"); // NOI18N
        cleanButton.setPreferredSize(new java.awt.Dimension(69, 23));
        cleanButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cleanButtonActionPerformed(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 3;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridwidth = 2;
        mainPartitionsPanel.add(cleanButton, gridBagConstraints);

        trainingButtons.setName("trainingButtons"); // NOI18N
        trainingButtons.setLayout(new java.awt.GridLayout(2, 1));

        addTrainingButton.setText("-->");
        addTrainingButton.setToolTipText("Add selected file to training files");
        addTrainingButton.setName("addTrainingButton"); // NOI18N
        addTrainingButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                addTrainingButtonaddButtonActionPerformed(evt);
            }
        });
        trainingButtons.add(addTrainingButton);

        removeTrainingButton.setText("<--");
        removeTrainingButton.setToolTipText("Remove selected file from training files");
        removeTrainingButton.setName("removeTrainingButton"); // NOI18N
        removeTrainingButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                removeTrainingButtonremoveButtonActionPerformed(evt);
            }
        });
        trainingButtons.add(removeTrainingButton);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 1;
        mainPartitionsPanel.add(trainingButtons, gridBagConstraints);

        testingButtons.setName("testingButtons"); // NOI18N
        testingButtons.setLayout(new java.awt.GridLayout(2, 1));

        addTestingButton.setText("-->");
        addTestingButton.setToolTipText("Add selected file to test files");
        addTestingButton.setName("addTestingButton"); // NOI18N
        addTestingButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                addTestingButtonaddButtonActionPerformed(evt);
            }
        });
        testingButtons.add(addTestingButton);

        removeTestingButton.setText("<--");
        removeTestingButton.setToolTipText("Remove selected file from test files");
        removeTestingButton.setName("removeTestingButton"); // NOI18N
        removeTestingButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                removeTestingButtonremoveButtonActionPerformed(evt);
            }
        });
        testingButtons.add(removeTestingButton);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 2;
        mainPartitionsPanel.add(testingButtons, gridBagConstraints);

        outputFormatPartitionsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Options"));
        outputFormatPartitionsPanel.setName("outputFormatPartitionsPanel"); // NOI18N

        optionsPartitionsButton.setText("Options");
        optionsPartitionsButton.setToolTipText("Click to configure the options of this format");
        optionsPartitionsButton.setMaximumSize(new java.awt.Dimension(100, 100));
        optionsPartitionsButton.setMinimumSize(new java.awt.Dimension(88, 30));
        optionsPartitionsButton.setName("optionsPartitionsButton"); // NOI18N
        optionsPartitionsButton.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                optionsPartitionsButtonItemStateChanged(evt);
            }
        });
        optionsPartitionsButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                optionsPartitionsButtonActionPerformed(evt);
            }
        });

        outputFormatPartitionsComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Keel to CSV", "Keel to TXT", "Keel to PRN", "Keel to C4.5", "Keel to Excel", "Keel to Dif", "Keel to PropertyList", "Keel to Weka", "Keel to XML", "Keel to HTML Tab" }));
        outputFormatPartitionsComboBox.setToolTipText("Select Output Format");
        outputFormatPartitionsComboBox.setName("outputFormatPartitionsComboBox"); // NOI18N
        outputFormatPartitionsComboBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                outputFormatPartitionsComboBoxItemStateChanged(evt);
            }
        });

        outputFormatPartitionsLabel.setText("Select Output Format");
        outputFormatPartitionsLabel.setName("outputFormatPartitionsLabel"); // NOI18N

        javax.swing.GroupLayout outputFormatPartitionsPanelLayout = new javax.swing.GroupLayout(outputFormatPartitionsPanel);
        outputFormatPartitionsPanel.setLayout(outputFormatPartitionsPanelLayout);
        outputFormatPartitionsPanelLayout.setHorizontalGroup(
            outputFormatPartitionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(outputFormatPartitionsPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(outputFormatPartitionsLabel)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(outputFormatPartitionsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(optionsPartitionsButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(90, Short.MAX_VALUE))
        );
        outputFormatPartitionsPanelLayout.setVerticalGroup(
            outputFormatPartitionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(outputFormatPartitionsPanelLayout.createSequentialGroup()
                .addGroup(outputFormatPartitionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(outputFormatPartitionsLabel)
                    .addComponent(outputFormatPartitionsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(optionsPartitionsButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 3;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.gridheight = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        mainPartitionsPanel.add(outputFormatPartitionsPanel, gridBagConstraints);

        fileBrowserPanel1.setName("fileBrowserPanel1"); // NOI18N
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.gridheight = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 0.8;
        mainPartitionsPanel.add(fileBrowserPanel1, gridBagConstraints);

        javax.swing.GroupLayout exportPartitionsPanelLayout = new javax.swing.GroupLayout(exportPartitionsPanel);
        exportPartitionsPanel.setLayout(exportPartitionsPanelLayout);
        exportPartitionsPanelLayout.setHorizontalGroup(
            exportPartitionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(mainPartitionsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 721, Short.MAX_VALUE)
        );
        exportPartitionsPanelLayout.setVerticalGroup(
            exportPartitionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(mainPartitionsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 484, Short.MAX_VALUE)
        );

        add(exportPartitionsPanel, "Partitions");
    }// </editor-fold>//GEN-END:initComponents

private void nextSelectDatasetButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nextSelectDatasetButtonActionPerformed
    lastSelectedPanel = "Select";
    ((CardLayout) this.getLayout()).show(this, "Browser");
    datasets = true;
}//GEN-LAST:event_nextSelectDatasetButtonActionPerformed

private void nextSelectPartitionsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nextSelectPartitionsButtonActionPerformed
    lastSelectedPanel = "Select";
    ((CardLayout) this.getLayout()).show(this, "Partitions");
    datasets = false;
}//GEN-LAST:event_nextSelectPartitionsButtonActionPerformed

private void optionsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_optionsButtonActionPerformed
    exportOptionsDialog.setVisible(true);
    if (!exportOptionsDialog.isOk()) {
        exportOptionsDialog = createNewOptionsDialog(((String) outputFormatComboBox.getSelectedItem()));
    }
}//GEN-LAST:event_optionsButtonActionPerformed

private void outputFormatComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_outputFormatComboBoxItemStateChanged
    if (((String) outputFormatComboBox.getSelectedItem()).equals("Keel to Dif") || ((String) outputFormatComboBox.getSelectedItem()).equals("Keel to PropertyList") || ((String) outputFormatComboBox.getSelectedItem()).equals("Keel to Weka") || ((String) outputFormatComboBox.getSelectedItem()).equals("Keel to XML") || ((String) outputFormatComboBox.getSelectedItem()).equals("Keel to HTML Tab")) {
        optionsButton.setEnabled(false);
    } else {
        optionsButton.setEnabled(true);
    }
    exportOptionsDialog = createNewOptionsDialog(((String) outputFormatComboBox.getSelectedItem()));
}//GEN-LAST:event_outputFormatComboBoxItemStateChanged

private void nextBrowserButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nextBrowserButtonActionPerformed
    File originalFile = null;
    String outputFileName = null;

    originalFile = fileBrowserPanel.getFileChooser().getSelectedFile();
    if (originalFile == null) {
        JOptionPane.showMessageDialog(this, "You have to select a file", "Error", JOptionPane.ERROR_MESSAGE);
        return;
    }
    outputFileName = convert(originalFile.getPath(), System.getProperty("java.io.tmpdir"));
    if (outputFileName == null) {
        return;
    } else if (outputFileName.equals("")) {
        return;
    }
    tmpTrainingExportedFile = new File(outputFileName);

    showText(originalFile, originalTextArea);
    if (!lastSelectedType.equals("Keel to Excel") && !lastSelectedType.equals("Keel to Database SQL")) {
        showText(tmpTrainingExportedFile, resultTextArea);
    } else {
        resultTextArea.setText("Previsualization not available!");
    }
    informationPartitionsLabel.setText("This is a previsualization of the result of exporting the file you have given");

    originalLabel.setText("Original File " + originalFile.getName() + " (KEEL format)");
    String format = ((String) outputFormatComboBox.getSelectedItem());
    if (!lastSelectedType.equals("Keel to Database SQL")) {
        resultsLabel.setText("Exported File " + originalFile.getName() + " (" + format.substring(8) + " format)");
    } else {
        resultsLabel.setText("Exported Database (" + format.substring(8) + " format)");
    }
    lastSelectedPanel = "Browser";
    ((CardLayout) this.getLayout()).show(this, "Preview");
    Path.setFilePath(fileBrowserPanel.getFileChooser().getCurrentDirectory());
    fileBrowserPanel1.getFileChooser().setCurrentDirectory(Path.getFilePath());
}//GEN-LAST:event_nextBrowserButtonActionPerformed

private void backBrowserButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_backBrowserButtonActionPerformed
    lastSelectedPanel = "Browser";
    ((CardLayout) this.getLayout()).show(this, "Select");
    Path.setFilePath(fileBrowserPanel.getFileChooser().getCurrentDirectory());
    fileBrowserPanel1.getFileChooser().setCurrentDirectory(Path.getFilePath());
}//GEN-LAST:event_backBrowserButtonActionPerformed

private void nextPreviewButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nextPreviewButtonActionPerformed
    if (!datasets) {
        JFileChooser chooser = new JFileChooser();
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        chooser.setDialogTitle("Select a folder to save the files");
        chooser.setCurrentDirectory(Path.getFilePath());

        String name = tmpTrainingExportedFile.getName();
        int index = name.indexOf("-");
        if (index == -1) {
            index = name.lastIndexOf(".");
        }
        if (index == -1) {
            index = name.length();
        }
        name = name.substring(0, index);
        chooser.setSelectedFile(new File(Path.getFilePath() + File.separator + name));
        int returnVal = chooser.showSaveDialog(this);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            Path.setFilePath(chooser.getCurrentDirectory());

            File directory = new File(chooser.getSelectedFile().getPath());
            if (!directory.exists()) {
                if (!directory.mkdirs()) {
                    JOptionPane.showMessageDialog(this, "Problem Creating Directory", "Error", JOptionPane.ERROR_MESSAGE);
                    return;
                }
            }

            String outputPath = directory.getPath();
            if (!outputPath.endsWith(File.separator)) {
                outputPath = outputPath.concat(File.separator);
            }
            for (int i = 0; i < trainingModel.size(); i++) {
                String ext = tmpTrainingExportedFile.getName();
                ext = ext.substring(ext.lastIndexOf("."), ext.length());
                File trainingFile = new File(outputPath + (new File((String) trainingModel.getElementAt(i))).getName().replaceAll(".dat", ext));
                File testFile = new File(outputPath + (new File((String) testingModel.getElementAt(i))).getName().replaceAll(".dat", ext));

                if (!wantToBeOverwritten(trainingFile) || !wantToBeOverwritten(testFile)) {
                    return;
                }
            }

            try {

                FileUtils.copy(tmpTrainingExportedFile.getPath(), outputPath + tmpTrainingExportedFile.getName());
                tmpTrainingExportedFile.delete();
                if (lastSelectedType.equals("Keel to C4.5")) {
                    File namesFile = new File(tmpTrainingExportedFile.getPath().replaceAll(".data", ".names"));
                    FileUtils.copy(namesFile.getPath(), outputPath + namesFile.getName());
                    namesFile.delete();
                }

                File firstTestFile = new File((String) testingModel.getElementAt(0));
                String firstTestOutputFileName = convert(firstTestFile.getPath(), outputPath);
                if (firstTestOutputFileName == null) {
                    return;
                } else if (firstTestOutputFileName.equals("") || firstTestOutputFileName.equals("")) {
                    return;
                }
                for (int i = 1; i < trainingModel.size(); i++) {
                    File originalTrainingFile = new File((String) trainingModel.getElementAt(i));
                    File originalTestFile = new File((String) testingModel.getElementAt(i));

                    String trainingOutputFileName = convert(originalTrainingFile.getPath(), outputPath);
                    String testOutputFileName = convert(originalTestFile.getPath(), outputPath);
                    if (trainingOutputFileName == null || testOutputFileName == null) {
                        return;
                    } else if (trainingOutputFileName.equals("") || testOutputFileName.equals("")) {
                        return;
                    }
                }
            } catch (IOException ex) {
                JOptionPane.showMessageDialog(this, "Error importing data file:\n" + ex.getLocalizedMessage(), "Error", JOptionPane.ERROR_MESSAGE);
                return;
            }
            ((CardLayout) this.getLayout()).show(this, "Select");
            datasets = false;
        } else {
            return;
        }

    } else {
        String ext = "";
        String desc = "";
        if (lastSelectedType.equals("Keel to CSV")) {
            ext = "csv";
            desc = "CSV Files (.csv)";
        } else if (lastSelectedType.equals("Keel to TXT")) {
            ext = "txt";
            desc = "TXT Files (.txt)";
        } else if (lastSelectedType.equals("Keel to PRN")) {
            ext = "prn";
            desc = "PRN Files (.prn)";
        } else if (lastSelectedType.equals("Keel to C4.5")) {
            ext = "data";
            desc = "C45 Files (.data)";
        } else if (lastSelectedType.equals("Keel to Excel")) {
            ext = "xls";
            desc = "Excel Files (.xls)";
        } else if (lastSelectedType.equals("Keel to Dif")) {
            ext = "dif";
            desc = "DIF Files (.dif)";
        } else if (lastSelectedType.equals("Keel to PropertyList")) {
            ext = "plist";
            desc = "Properties' Files (.plist)";
        } else if (lastSelectedType.equals("Keel to Weka")) {
            ext = "arff";
            desc = "Weka Files (.arff)";
        } else if (lastSelectedType.equals("Keel to XML")) {
            ext = "xml";
            desc = "XML Files (.xml)";
        } else if (lastSelectedType.equals("Keel to HTML Tab")) {
            ext = "html";
            desc = "HTML Files (.html)";
        } else if (lastSelectedType.equals("Keel to Database SQL")) {
            ((CardLayout) this.getLayout()).show(this, "Select");
            datasets = false;
            return;
        }
        JFileChooser chooser = new JFileChooser();
        KeelFileFilter fileFilter = new KeelFileFilter();
        fileFilter.addExtension(ext);
        fileFilter.setFilterName(desc);
        chooser.setFileFilter(fileFilter);
        chooser.setCurrentDirectory(Path.getFilePath());
        //chooser.setName(ext);
        chooser.setSelectedFile(new File(Path.getFilePath() + File.separator + tmpTrainingExportedFile.getName()));

        int returnVal = chooser.showSaveDialog(this);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            Path.setFilePath(chooser.getCurrentDirectory());
            File file = chooser.getSelectedFile();

            if (!wantToBeOverwritten(file)) {
                return;
            }
            try {
                FileUtils.copy(tmpTrainingExportedFile.getPath(), file.getPath());
                tmpTrainingExportedFile.delete();
            } catch (IOException ex) {
                JOptionPane.showMessageDialog(this, "Error importing data file:\n" + ex.getLocalizedMessage(), "Error", JOptionPane.ERROR_MESSAGE);
                return;
            }
            ((CardLayout) this.getLayout()).show(this, "Select");
            datasets = false;
        } else {
            return;
        }
    }

}//GEN-LAST:event_nextPreviewButtonActionPerformed

private void backPreviewButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_backPreviewButtonActionPerformed
    if (tmpTrainingExportedFile != null) {
        tmpTrainingExportedFile.delete();
//    if(tmpTestingExportedFile!=null)
//        tmpTestingExportedFile.delete();
    }
    ((CardLayout) this.getLayout()).show(this, lastSelectedPanel);
    lastSelectedPanel = "Preview";//GEN-LAST:event_backPreviewButtonActionPerformed
    }

private void nextPartitionsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nextPartitionsButtonActionPerformed
    File originalTrainingFile = null;
    File originalTestFile = null;
    if (trainingModel.getSize() == 0 || testingModel.getSize() == 0) {
        JOptionPane.showMessageDialog(this, "You have to select at least one training/test pair of files", "Error", JOptionPane.ERROR_MESSAGE);
        return;
    }
    if (trainingModel.getSize() != testingModel.getSize()) {
        JOptionPane.showMessageDialog(this, "You have to select the same number of training and test files", "Error", JOptionPane.ERROR_MESSAGE);
        return;
    }
    originalTrainingFile = new File((String) trainingModel.firstElement());
    originalTestFile = new File((String) testingModel.firstElement());

    String trainingOutputFileName = convert(originalTrainingFile.getPath(), System.getProperty("java.io.tmpdir"));
//    String testOutputFileName = convert(originalTestFile.getPath(), System.getProperty("java.io.tmpdir"));
    if (trainingOutputFileName == null) {
        return;
    } else if (trainingOutputFileName.equals("")) {
        return;
    }
    tmpTrainingExportedFile = new File(trainingOutputFileName);
//    tmpTestingExportedFile = new File(testOutputFileName);
    showText(originalTrainingFile, originalTextArea);
    if (!lastSelectedType.equals("Keel to Excel")) {
        showText(tmpTrainingExportedFile, resultTextArea);
    } else {
        resultTextArea.setText("Previsualization not available!");
    }
    informationPartitionsLabel.setText("This is a previsualization of the result of exporting the files you have given");
    lastSelectedPanel = "Partitions";
    String format = ((String) outputFormatPartitionsComboBox.getSelectedItem());
    originalLabel.setText("Original File " + originalTrainingFile.getName() + " (KEEL format)");
    resultsLabel.setText("Exported File " + tmpTrainingExportedFile.getName() + " (" + format.substring(8) + " format)");
    ((CardLayout) this.getLayout()).show(this, "Preview");

    Path.setFilePath(fileBrowserPanel1.getFileChooser().getCurrentDirectory());
    fileBrowserPanel.getFileChooser().setCurrentDirectory(Path.getFilePath());
}//GEN-LAST:event_nextPartitionsButtonActionPerformed

private void backPartitionsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_backPartitionsButtonActionPerformed
    lastSelectedPanel = "Partitions";
    ((CardLayout) this.getLayout()).show(this, "Select");
    Path.setFilePath(fileBrowserPanel1.getFileChooser().getCurrentDirectory());
    fileBrowserPanel.getFileChooser().setCurrentDirectory(Path.getFilePath());
}//GEN-LAST:event_backPartitionsButtonActionPerformed

private void addTrainingButtonaddButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addTrainingButtonaddButtonActionPerformed
    File[] files = fileBrowserPanel1.getFileChooser().getSelectedFiles();
    if (files != null) {
        for (int i = 0; i < files.length; i++) {
            if (!trainingModel.contains(files[i].getPath())) {
                trainingModel.addElement(files[i].getPath());
            }
        }
    }
}//GEN-LAST:event_addTrainingButtonaddButtonActionPerformed

private void removeTrainingButtonremoveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeTrainingButtonremoveButtonActionPerformed
    Object[] seleccionados = trainingList.getSelectedValues();
    if (seleccionados != null) {
        for (int i = 0; i < seleccionados.length; i++) {
            trainingModel.removeElement(seleccionados[i]);
        }
    }
}//GEN-LAST:event_removeTrainingButtonremoveButtonActionPerformed

private void addTestingButtonaddButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addTestingButtonaddButtonActionPerformed
    File[] files = fileBrowserPanel1.getFileChooser().getSelectedFiles();
    if (files != null) {
        for (int i = 0; i < files.length; i++) {
            if (!testingModel.contains(files[i].getPath())) {
                testingModel.addElement(files[i].getPath());
            }
        }
    }
}//GEN-LAST:event_addTestingButtonaddButtonActionPerformed

private void removeTestingButtonremoveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeTestingButtonremoveButtonActionPerformed
    int[] indices = testingList.getSelectedIndices();
    if (indices != null) {
        for (int i = 0; i < indices.length; i++) {
            testingModel.remove(i);
        }
    }
}//GEN-LAST:event_removeTestingButtonremoveButtonActionPerformed

private void optionsPartitionsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_optionsPartitionsButtonActionPerformed
    exportOptionsDialog.setVisible(true);
    if (!exportOptionsDialog.isOk()) {
        exportOptionsDialog = createNewOptionsDialog(((String) outputFormatPartitionsComboBox.getSelectedItem()));
    }
}//GEN-LAST:event_optionsPartitionsButtonActionPerformed

private void outputFormatPartitionsComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_outputFormatPartitionsComboBoxItemStateChanged
    if (((String) outputFormatPartitionsComboBox.getSelectedItem()).equals("Keel to Dif") || ((String) outputFormatPartitionsComboBox.getSelectedItem()).equals("Keel to PropertyList") || ((String) outputFormatPartitionsComboBox.getSelectedItem()).equals("Keel to Weka") || ((String) outputFormatPartitionsComboBox.getSelectedItem()).equals("Keel to XML") || ((String) outputFormatPartitionsComboBox.getSelectedItem()).equals("Keel to HTML Tab")) {
        optionsPartitionsButton.setEnabled(false);
    } else {
        optionsPartitionsButton.setEnabled(true);
    }
    exportOptionsDialog = createNewOptionsDialog(((String) outputFormatPartitionsComboBox.getSelectedItem()));
}//GEN-LAST:event_outputFormatPartitionsComboBoxItemStateChanged

private void optionsPartitionsButtonItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_optionsPartitionsButtonItemStateChanged
}//GEN-LAST:event_optionsPartitionsButtonItemStateChanged

private void cleanButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cleanButtonActionPerformed
    trainingModel.removeAllElements();
    testingModel.removeAllElements();
}//GEN-LAST:event_cleanButtonActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton addTestingButton;
    private javax.swing.JButton addTrainingButton;
    private javax.swing.JButton backBrowserButton;
    private javax.swing.JButton backPartitionsButton;
    private javax.swing.JButton backPreviewButton;
    private javax.swing.JPanel buttonPanel;
    private javax.swing.JButton cleanButton;
    private javax.swing.JLabel datasetIcon;
    private javax.swing.JPanel exportBrowserPanel;
    private javax.swing.JLabel exportDatasetLabel;
    private javax.swing.JLabel exportPartitionsLabel;
    private javax.swing.JPanel exportPartitionsPanel;
    private javax.swing.JPanel exportPreviewPanel;
    private javax.swing.JPanel exportSelectMainPanel;
    private javax.swing.JPanel exportSelectPanel;
    private javax.swing.JSeparator exportSeparator;
    private keel.GraphInterKeel.datacf.util.FileBrowserPanel fileBrowserPanel;
    private keel.GraphInterKeel.datacf.util.FileBrowserPanel fileBrowserPanel1;
    private javax.swing.JLabel informationLabel;
    private javax.swing.JLabel informationPartitionsLabel;
    private javax.swing.JPanel leftPreviewPanel;
    private javax.swing.JPanel mainPanel;
    private javax.swing.JPanel mainPartitionsPanel;
    private javax.swing.JButton nextBrowserButton;
    private javax.swing.JButton nextPartitionsButton;
    private javax.swing.JButton nextPreviewButton;
    private javax.swing.JButton nextSelectDatasetButton;
    private javax.swing.JButton nextSelectPartitionsButton;
    private javax.swing.JButton optionsButton;
    private javax.swing.JButton optionsPartitionsButton;
    private javax.swing.JLabel originalLabel;
    private javax.swing.JScrollPane originalScrollPanel;
    private javax.swing.JSeparator originalSeparator;
    private javax.swing.JTextArea originalTextArea;
    private javax.swing.JComboBox outputFormatComboBox;
    private javax.swing.JLabel outputFormatLabel;
    private javax.swing.JComboBox outputFormatPartitionsComboBox;
    private javax.swing.JLabel outputFormatPartitionsLabel;
    private javax.swing.JPanel outputFormatPartitionsPanel;
    private javax.swing.JLabel partitionsIcon;
    private javax.swing.JButton removeTestingButton;
    private javax.swing.JButton removeTrainingButton;
    private javax.swing.JScrollPane resultScrollPanel;
    private javax.swing.JSeparator resultSeparator;
    private javax.swing.JTextArea resultTextArea;
    private javax.swing.JLabel resultsLabel;
    private javax.swing.JPanel rightPreviewPanel;
    private javax.swing.JPanel testingButtons;
    private javax.swing.JList testingList;
    private javax.swing.JPanel testingPanel;
    private javax.swing.JScrollPane testingScrollPanel;
    private javax.swing.JPanel trainingButtons;
    private javax.swing.JList trainingList;
    private javax.swing.JPanel trainingPanel;
    private javax.swing.JScrollPane trainingScrollPanel;
    // End of variables declaration//GEN-END:variables

    /** Parent frame */
    protected JFrame parent = null;

    /** String for having an history of the last selected panel */
    protected String lastSelectedPanel = "";

    /** Dataset mode (true) or partition mode (false) */
    protected boolean datasets = false;

    /** An option dialog for obtaining the options of the export proccess */
    protected OptionsDialog exportOptionsDialog = null;

    /** The model for storing the training files used in the partition mode */
    protected DefaultListModel trainingModel = new DefaultListModel();

    /** The model for storing the testing files used in the partition mode */
    protected DefaultListModel testingModel = new DefaultListModel();

    /** String for having an history of the last type of conversion */
    protected String lastSelectedType = "Keel to CSV";

    /** Temporal File used for previsualizing the results of the export proccess (in training)*/
    protected File tmpTrainingExportedFile;

    /**
     * <p>
     * Sets the JFrame parent
     * </p>
     * @param parent JFrame parent
     */
    public void setParent(JFrame parent) {
        this.parent = parent;
    }

    /**
     * <p>
     * Exports inputFile (in KEEL format) to outputFile (in a given format).
     * </p>
     * @param inputFile Path of the input file.
     * @param outputFile Path of the output file.
     */
    public String convert(String inputFile, String outputFile) {

        if (exportOptionsDialog == null) {
            return null;
        }

        String separatorValue = "";
        String nullValueValue = "";
        String dBdriver = "";
        String dBURL = "";
        String user = "";
        Object passw = "";
        String pathnameOutput = "";

        // CSV file
        // --------
        if (lastSelectedType.equals("Keel to CSV")) {
            File fileInput = new File(inputFile);

            if (!fileInput.exists()) {
                JOptionPane.showMessageDialog(this, "Input file doesn't exists");
                return null;
            }

            File fileOutput = new File(outputFile);

            if (!fileOutput.exists()) {
                JOptionPane.showMessageDialog(this, "The output path doesn't exists");
                return null;
            }

            separatorValue = exportOptionsDialog.getOptionValue("Separator");

            if (separatorValue.equals("")) {
                separatorValue = "none";
            }

            nullValueValue = exportOptionsDialog.getOptionValue("Null Value");

            String pathnameInput = inputFile;
            pathnameOutput = outputFile;
            String nullValue = nullValueValue;
            String separator = separatorValue;

            if (nullValue.equalsIgnoreCase("none")) {
                nullValue = "";
            }
            File fileInput1 = new File(pathnameInput);


            // Obtenemos la ruta del fichero de salida
            String filenameOutput = fileInput1.getName();

            /*Pattern p=Pattern.compile("\\.[A-Za-z]+");
            Matcher m=p.matcher(filenameOutput);
            filenameOutput=m.replaceAll("");*/

            // le quito la extension al nombre del fichero
            filenameOutput = filenameOutput.substring(0, filenameOutput.indexOf('.'));

            String folder = filenameOutput;
            String separatorFile = File.separator;

            if (!pathnameOutput.endsWith(separatorFile)) {
                pathnameOutput = pathnameOutput.concat(separatorFile);
            }


//            pathnameOutput = pathnameOutput.concat(folder + separatorFile);

            File fileOutput1 = new File(pathnameOutput);
            fileOutput1.mkdirs();


            pathnameOutput = pathnameOutput.concat(filenameOutput);
            pathnameOutput = pathnameOutput.concat(".csv");

            /*      try
            {
            String cadena = "\n ficheroEntrada:"+ pathnameInput+"\n ficheroSalida:"+ pathnameOutput;
            BufferedWriter fout = new BufferedWriter(new FileWriter("log.txt",true) );
            fout.write(cadena,0,cadena.length());
            fout.close();
            }catch(IOException e1){
            }
             */

            this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

            try {
                KeelToCsv keel2csv = new KeelToCsv(nullValue, separator);
                keel2csv.Start(pathnameInput, pathnameOutput);

                this.setCursor(Cursor.getDefaultCursor());
                //JOptionPane.showMessageDialog(this, "File " + fileInput.getName() + " correctly exported");
            } catch (Exception ex) {
                this.setCursor(Cursor.getDefaultCursor());
                JOptionPane.showMessageDialog(this, "Error exporting data file", "Error", JOptionPane.ERROR_MESSAGE);
            }

        }//end if(checkboxKeelToCsv.getStable())


        // TXT file
        // --------
        if (lastSelectedType.equals("Keel to TXT")) {


            File fileInput = new File(inputFile);

            if (!fileInput.exists()) {
                JOptionPane.showMessageDialog(this, "Input file doesn't exists");
                return null;
            }

            File fileOutput = new File(outputFile);

            if (!fileOutput.exists()) {
                JOptionPane.showMessageDialog(this, "The output path doesn't exists");
                return null;
            }

            nullValueValue = exportOptionsDialog.getOptionValue("Null Value");

            String pathnameInput = inputFile;
            pathnameOutput = outputFile;
            String nullValue = nullValueValue;


            if (nullValue.equalsIgnoreCase("none")) {
                nullValue = "";
            }
            File fileInput1 = new File(pathnameInput);


            // Obtenemos la ruta del fichero de salida
            String filenameOutput = fileInput1.getName();

            /*Pattern p=Pattern.compile("\\.[A-Za-z]+");
            Matcher m=p.matcher(filenameOutput);
            filenameOutput=m.replaceAll("");*/

            // le quito la extension al nombre del fichero
            filenameOutput = filenameOutput.substring(0, filenameOutput.indexOf('.'));

            String folder = filenameOutput;
            String separatorFile = File.separator;

            if (!pathnameOutput.endsWith(separatorFile)) {
                pathnameOutput = pathnameOutput.concat(separatorFile);
            }


//            pathnameOutput = pathnameOutput.concat(folder + separatorFile);

            File fileOutput1 = new File(pathnameOutput);
            fileOutput1.mkdirs();


            pathnameOutput = pathnameOutput.concat(filenameOutput);
            pathnameOutput = pathnameOutput.concat(".txt");



            this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

            try {
                KeelToTxt keel2txt = new KeelToTxt(nullValue);
                keel2txt.Start(pathnameInput, pathnameOutput);

                this.setCursor(Cursor.getDefaultCursor());
                //JOptionPane.showMessageDialog(this, "File " + fileInput.getName() + " correctly exported");
            } catch (Exception ex) {
                this.setCursor(Cursor.getDefaultCursor());
                JOptionPane.showMessageDialog(this, "Error exporting data file", "Error", JOptionPane.ERROR_MESSAGE);
            }

        }//end if(checkboxKeelToTxt.getState())

        // PRN file
        // --------
        if (lastSelectedType.equals("Keel to PRN")) {

            File fileInput = new File(inputFile);

            if (!fileInput.exists()) {
                JOptionPane.showMessageDialog(this, "Input file doesn't exists");
                return null;
            }

            File fileOutput = new File(outputFile);

            if (!fileOutput.exists()) {
                JOptionPane.showMessageDialog(this, "The output path doesn't exists");
                return null;
            }


            nullValueValue = exportOptionsDialog.getOptionValue("Null Value");

            if (nullValueValue.equals("")) {
                JOptionPane.showMessageDialog(this, "The null value parameter cannot be empty, change it in \"Options\"");
                return null;
            }


            String pathnameInput = inputFile;
            pathnameOutput = outputFile;
            String nullValue = nullValueValue;


            if (nullValue.equalsIgnoreCase("none")) {
                nullValue = "";
            }
            File fileInput1 = new File(pathnameInput);


            // Obtenemos la ruta del fichero de salida
            String filenameOutput = fileInput1.getName();


            // le quito la extension al nombre del fichero
            filenameOutput = filenameOutput.substring(0, filenameOutput.indexOf('.'));

//            String folder = filenameOutput;
            String separatorFile = File.separator;

            if (!pathnameOutput.endsWith(separatorFile)) {
                pathnameOutput = pathnameOutput.concat(separatorFile);
            }


            //        pathnameOutput = pathnameOutput.concat(folder + separatorFile);

            File fileOutput1 = new File(pathnameOutput);
            fileOutput1.mkdirs();


            pathnameOutput = pathnameOutput.concat(filenameOutput);
            pathnameOutput = pathnameOutput.concat(".prn");



            this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

            try {
                KeelToPrn keel2prn = new KeelToPrn(nullValue);
                keel2prn.Start(pathnameInput, pathnameOutput);

                this.setCursor(Cursor.getDefaultCursor());
                //JOptionPane.showMessageDialog(this, "File " + fileInput.getName() + " correctly exported");
            } catch (Exception ex) {
                this.setCursor(Cursor.getDefaultCursor());
                JOptionPane.showMessageDialog(this, "Error exporting data file", "Error", JOptionPane.ERROR_MESSAGE);
            }



        }//end if(checkboxKeelToPrn.getState())

        // C4.5 file
        // ---------
        if (lastSelectedType.equals("Keel to C4.5")) {


            File fileInput = new File(inputFile);

            if (!fileInput.exists()) {
                JOptionPane.showMessageDialog(this, "Input file doesn't exists");
                return null;
            }

            File fileOutput = new File(outputFile);

            if (!fileOutput.exists()) {
                JOptionPane.showMessageDialog(this, "The output path doesn't exists");
                return null;
            }

            separatorValue = exportOptionsDialog.getOptionValue("Separator");

            if (separatorValue.equals("")) {
                JOptionPane.showMessageDialog(this, "The Separator parameter cannot be empty, change it in \"Options\"");
                return null;
            }

            nullValueValue = exportOptionsDialog.getOptionValue("Null Value");

            String pathnameInput = inputFile;
            pathnameOutput = outputFile;
            String nullValue = nullValueValue;
            String separator = separatorValue;


            File fileInput1 = new File(pathnameInput);


            // Obtenemos la ruta del fichero de salida
            String filenameOutput = fileInput1.getName();


            // le quito la extension al nombre del fichero
            filenameOutput = filenameOutput.substring(0, filenameOutput.indexOf('.'));

//            String folder = filenameOutput;
            String separatorFile = File.separator;

            if (!pathnameOutput.endsWith(separatorFile)) {
                pathnameOutput = pathnameOutput.concat(separatorFile);
            }

            // pathnameOutput = pathnameOutput.concat(folder + separatorFile);

            File fileOutput1 = new File(pathnameOutput);
            fileOutput1.mkdirs();

            pathnameOutput = pathnameOutput.concat(filenameOutput);
            String pathnameOutputNames = pathnameOutput.concat(".names");
            //String pathnameOutputData = pathnameOutput.concat(".data");

            this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

            try {

                KeelToUci keel2uci = new KeelToUci(nullValue, separator);
                keel2uci.Start(pathnameInput, pathnameOutputNames, pathnameOutput);

                this.setCursor(Cursor.getDefaultCursor());
                //JOptionPane.showMessageDialog(this, "File " + fileInput.getName() + " correctly exported");
            } catch (Exception ex) {
                this.setCursor(Cursor.getDefaultCursor());
                JOptionPane.showMessageDialog(this, "Error exporting data file", "Error", JOptionPane.ERROR_MESSAGE);
            }


            pathnameOutput = pathnameOutput.concat(".data");

        }//end if(checkboxKeelToUci.getState())


        // Excel file
        // ----------
        if (lastSelectedType.equals("Keel to Excel")) {


            File fileInput = new File(inputFile);

            if (!fileInput.exists()) {
                JOptionPane.showMessageDialog(this, "Input file doesn't exists");
                return null;
            }

            File fileOutput = new File(outputFile);

            if (!fileOutput.exists()) {
                JOptionPane.showMessageDialog(this, "The output path doesn't exists");
                return null;
            }


            nullValueValue = exportOptionsDialog.getOptionValue("Null Value");

            String pathnameInput = inputFile;
            pathnameOutput = outputFile;
            String nullValue = nullValueValue;

            if (nullValue.equals("?")) {
                nullValue = "";
            }
            File fileInput1 = new File(pathnameInput);


            // Obtenemos la ruta del fichero de salida
            String filenameOutput = fileInput1.getName();


            // le quito la extension al nombre del fichero
            filenameOutput = filenameOutput.substring(0, filenameOutput.indexOf('.'));

            String folder = filenameOutput;
            String separatorFile = File.separator;

            if (!pathnameOutput.endsWith(separatorFile)) {
                pathnameOutput = pathnameOutput.concat(separatorFile);
            }

//            pathnameOutput = pathnameOutput.concat(folder + separatorFile);

            File fileOutput1 = new File(pathnameOutput);
            fileOutput1.mkdirs();


            pathnameOutput = pathnameOutput.concat(filenameOutput);
            pathnameOutput = pathnameOutput.concat(".xls");



            this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

            try {
                KeelToExcel keel2excel = new KeelToExcel(nullValue);

                keel2excel.Start(pathnameInput, pathnameOutput);

                this.setCursor(Cursor.getDefaultCursor());
                //JOptionPane.showMessageDialog(this, "File " + fileInput.getName() + " correctly exported");
            } catch (Exception ex) {
                this.setCursor(Cursor.getDefaultCursor());
                JOptionPane.showMessageDialog(this, "Error exporting data file", "Error", JOptionPane.ERROR_MESSAGE);
            }

        }//end if(checkboxKeelToExcel.getState())

        // DIF file
        // --------
        if (lastSelectedType.equals("Keel to Dif")) {



            File fileInput = new File(inputFile);

            if (!fileInput.exists()) {
                JOptionPane.showMessageDialog(this, "Input file doesn't exists");
                return null;
            }

            File fileOutput = new File(outputFile);

            if (!fileOutput.exists()) {
                JOptionPane.showMessageDialog(this, "The output path doesn't exists");
                return null;
            }

            String pathnameInput = inputFile;
            pathnameOutput = outputFile;

            File fileInput1 = new File(pathnameInput);

            // Obtenemos la ruta del fichero de salida
            String filenameOutput = fileInput1.getName();

            // le quito la extension al nombre del fichero
            filenameOutput = filenameOutput.substring(0, filenameOutput.indexOf('.'));

            String folder = filenameOutput;
            String separatorFile = File.separator;

            if (!pathnameOutput.endsWith(separatorFile)) {
                pathnameOutput = pathnameOutput.concat(separatorFile);
            }


            //           pathnameOutput = pathnameOutput.concat(folder + separatorFile);

            File fileOutput1 = new File(pathnameOutput);
            fileOutput1.mkdirs();


            pathnameOutput = pathnameOutput.concat(filenameOutput);
            pathnameOutput = pathnameOutput.concat(".dif");



            this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

            try {
                KeelToDif keel2dif = new KeelToDif();

                keel2dif.Start(pathnameInput, pathnameOutput);

                this.setCursor(Cursor.getDefaultCursor());
                //JOptionPane.showMessageDialog(this, "File " + fileInput.getName() + " correctly exported");
            } catch (Exception ex) {
                this.setCursor(Cursor.getDefaultCursor());
                JOptionPane.showMessageDialog(this, "Error exporting data file", "Error", JOptionPane.ERROR_MESSAGE);
            }

        }//end if(checkboxoKeelToDif.getState())

        // Property list file
        // ------------------
        if (lastSelectedType.equals("Keel to PropertyList")) {

            File fileInput = new File(inputFile);

            if (!fileInput.exists()) {
                JOptionPane.showMessageDialog(this, "Input file doesn't exists");
                return null;
            }

            File fileOutput = new File(outputFile);

            if (!fileOutput.exists()) {
                JOptionPane.showMessageDialog(this, "The output path doesn't existse");
                return null;
            }



            String pathnameInput = inputFile;
            pathnameOutput = outputFile;


            File fileInput1 = new File(pathnameInput);


            // Obtenemos la ruta del fichero de salida
            String filenameOutput = fileInput1.getName();


            // le quito la extension al nombre del fichero
            filenameOutput = filenameOutput.substring(0, filenameOutput.indexOf('.'));

            String folder = filenameOutput;
            String separatorFile = File.separator;

            if (!pathnameOutput.endsWith(separatorFile)) {
                pathnameOutput = pathnameOutput.concat(separatorFile);
            }


//            pathnameOutput = pathnameOutput.concat(folder + separatorFile);

            File fileOutput1 = new File(pathnameOutput);
            fileOutput1.mkdirs();


            pathnameOutput = pathnameOutput.concat(filenameOutput);
            pathnameOutput = pathnameOutput.concat(".plist");




            this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

            try {
                KeelToPropertyList keel2propertylist = new KeelToPropertyList();

                keel2propertylist.Start(pathnameInput, pathnameOutput);

                this.setCursor(Cursor.getDefaultCursor());
                //JOptionPane.showMessageDialog(this, "File " + fileInput.getName() + " correctly exported");
            } catch (Exception ex) {
                this.setCursor(Cursor.getDefaultCursor());
                JOptionPane.showMessageDialog(this, "Error exporting data file", "Error", JOptionPane.ERROR_MESSAGE);
            }


        }//end if(checkboxKeelToPlist.getState())

        // Weka file
        // ---------
        if (lastSelectedType.equals("Keel to Weka")) {


            File fileInput = new File(inputFile);

            if (!fileInput.exists()) {
                JOptionPane.showMessageDialog(this, "Input file doesn't exists");
                return null;
            }

            File fileOutput = new File(outputFile);

            if (!fileOutput.exists()) {
                JOptionPane.showMessageDialog(this, "The output path doesn't exists");
                return null;
            }




            String pathnameInput = inputFile;
            pathnameOutput = outputFile;


            File fileInput1 = new File(pathnameInput);


            // Obtenemos la ruta del fichero de salida
            String filenameOutput = fileInput1.getName();


            // le quito la extension al nombre del fichero
            filenameOutput = filenameOutput.substring(0, filenameOutput.indexOf('.'));

            String folder = filenameOutput;
            String separatorFile = File.separator;

            if (!pathnameOutput.endsWith(separatorFile)) {
                pathnameOutput = pathnameOutput.concat(separatorFile);
            }


//           pathnameOutput = pathnameOutput.concat(folder + separatorFile);

            File fileOutput1 = new File(pathnameOutput);
            fileOutput1.mkdirs();


            pathnameOutput = pathnameOutput.concat(filenameOutput);
            pathnameOutput = pathnameOutput.concat(".arff");




            this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

            try {
                KeelToWeka keel2weka = new KeelToWeka();

                keel2weka.Start(pathnameInput, pathnameOutput);

                this.setCursor(Cursor.getDefaultCursor());
                //JOptionPane.showMessageDialog(this, "File " + fileInput.getName() + " correctly exported");
            } catch (Exception ex) {
                this.setCursor(Cursor.getDefaultCursor());
                JOptionPane.showMessageDialog(this, "Error exporting data file", "Error", JOptionPane.ERROR_MESSAGE);
            }



        }//end if(checkboxKeelToWeka.getState())


        // XML file
        // --------
        if (lastSelectedType.equals("Keel to XML")) {


            File fileInput = new File(inputFile);

            if (!fileInput.exists()) {
                JOptionPane.showMessageDialog(this, "Input file doesn't exists");
                return null;
            }

            File fileOutput = new File(outputFile);

            if (!fileOutput.exists()) {
                JOptionPane.showMessageDialog(this, "The output path doesn't exists");
                return null;
            }


            String pathnameInput = inputFile;
            pathnameOutput = outputFile;


            File fileInput1 = new File(pathnameInput);


            // Obtenemos la ruta del fichero de salida
            String filenameOutput = fileInput1.getName();


            // le quito la extension al nombre del fichero
            filenameOutput = filenameOutput.substring(0, filenameOutput.indexOf('.'));

            String folder = filenameOutput;
            String separatorFile = File.separator;

            if (!pathnameOutput.endsWith(separatorFile)) {
                pathnameOutput = pathnameOutput.concat(separatorFile);
            }


//            pathnameOutput = pathnameOutput.concat(folder + separatorFile);

            File fileOutput1 = new File(pathnameOutput);
            fileOutput1.mkdirs();


            pathnameOutput = pathnameOutput.concat(filenameOutput);
            pathnameOutput = pathnameOutput.concat(".xml");



            this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

            try {

                KeelToXml keel2xml = new KeelToXml();

                keel2xml.Start(pathnameInput, pathnameOutput);


                this.setCursor(Cursor.getDefaultCursor());
                //JOptionPane.showMessageDialog(this, "File " + fileInput.getName() + " correctly exported");
            } catch (Exception ex) {
                this.setCursor(Cursor.getDefaultCursor());
                JOptionPane.showMessageDialog(this, "Error exporting data file", "Error", JOptionPane.ERROR_MESSAGE);
            }





        }//end if(checkboxKeelToXml.getState())


        // HTML Tab file
        // -------------
        if (lastSelectedType.equals("Keel to HTML Tab")) {


            File fileInput = new File(inputFile);

            if (!fileInput.exists()) {
                JOptionPane.showMessageDialog(this, "Input file doesn't exists");
                return null;
            }

            File fileOutput = new File(outputFile);

            if (!fileOutput.exists()) {
                JOptionPane.showMessageDialog(this, "The output path doesn't exists");
                return null;
            }


            String pathnameInput = inputFile;
            pathnameOutput = outputFile;


            File fileInput1 = new File(pathnameInput);


            // Obtenemos la ruta del fichero de salida
            String filenameOutput = fileInput1.getName();


            // le quito la extension al nombre del fichero
            filenameOutput = filenameOutput.substring(0, filenameOutput.indexOf('.'));

            String folder = filenameOutput;
            String separatorFile = File.separator;

            if (!pathnameOutput.endsWith(separatorFile)) {
                pathnameOutput = pathnameOutput.concat(separatorFile);
            }


            pathnameOutput = pathnameOutput.concat(folder + separatorFile);

            File fileOutput1 = new File(pathnameOutput);
            fileOutput1.mkdirs();


            pathnameOutput = pathnameOutput.concat(filenameOutput);
            pathnameOutput = pathnameOutput.concat(".html");



            this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

            try {

                KeelToHtml keel2html = new KeelToHtml();

                keel2html.Start(pathnameInput, pathnameOutput);

                this.setCursor(Cursor.getDefaultCursor());
                //JOptionPane.showMessageDialog(this, "File " + fileInput.getName() + " correctly exported");
            } catch (Exception ex) {
                this.setCursor(Cursor.getDefaultCursor());
                JOptionPane.showMessageDialog(this, "Error exporting data file", "Error", JOptionPane.ERROR_MESSAGE);
            }


        }//end if(checkboxKeelToHtml.getState())


        // Database
        // --------
        if (lastSelectedType.equals("Keel to Database SQL")) {


            File fileInput = new File(inputFile);

            if (!fileInput.exists()) {
                JOptionPane.showMessageDialog(this, "Please select an output path");
                return null;
            }

            dBdriver = exportOptionsDialog.getOptionValue("Driver");
            dBURL = exportOptionsDialog.getOptionValue("Database URL");
            user = exportOptionsDialog.getOptionValue("User");
            passw = exportOptionsDialog.getOptionValue("Password");

            if (dBdriver.equals("")) {
                JOptionPane.showMessageDialog(this, "The Driver parameter cannot be empty, change it in \"Options\"");
                return null;
            }

            if (dBURL.equals("")) {
                JOptionPane.showMessageDialog(this, "The Database-URL parameter cannot be empty, change it in \"Options\"");
                return null;
            }

            String tableName = fileInput.getName();

            tableName = tableName.substring(0, tableName.indexOf('.'));

            String pathnameInput = inputFile;
            String driverName = dBdriver;
            String databaseURL = dBURL;
            String login = user;
            String password = passw.toString();

            this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

            try {

                KeelToDb keel2db = new KeelToDb(driverName, databaseURL, tableName, login, password);

                keel2db.Start(pathnameInput);

                this.setCursor(Cursor.getDefaultCursor());
                //JOptionPane.showMessageDialog(this, "File " + fileInput.getName() + " correctly exported");
            } catch (Exception ex) {
                this.setCursor(Cursor.getDefaultCursor());
                JOptionPane.showMessageDialog(this, "Error exporting data file", "Error", JOptionPane.ERROR_MESSAGE);
            }


        }//end if(checkboxKeelToDb.getState())

        return pathnameOutput;
    }


    /**
     * <p>
     * Creates an options dialog with the options corresponding to a type
     * of conversion
     * </p>
     * @param type String with the type of conversion
     * @return OptionsDialog New options dialog.
     */
    private OptionsDialog createNewOptionsDialog(String type) {
        OptionsDialog newExportOptionsDialog = new OptionsDialog(parent, true);
        if (type.equals("Keel to CSV")) {
            newExportOptionsDialog.addProperty("Separator", ",");
            newExportOptionsDialog.addProperty("Null Value", "");
        } else if (type.equals("Keel to TXT")) {
            newExportOptionsDialog.addProperty("Null Value", "");
        } else if (type.equals("Keel to PRN")) {
            newExportOptionsDialog.addProperty("Null Value", "?");
        } else if (type.equals("Keel to C4.5")) {
            newExportOptionsDialog.addProperty("Separator", ",");
            newExportOptionsDialog.addProperty("Null Value", "");
        } else if (type.equals("Keel to Excel")) {
            newExportOptionsDialog.addProperty("Null Value", "");
        } else if (type.equals("Keel to Database SQL")) {
            newExportOptionsDialog.addProperty("Driver", "sun.jdbc.odbc.JdbcOdbcDriver");
            newExportOptionsDialog.addProperty("Database URL", "jdbc:subprotocol:subname");
            newExportOptionsDialog.addProperty("User", "");
            newExportOptionsDialog.addProperty("Password", "");
        }

        lastSelectedType = type;
        return newExportOptionsDialog;
    }

    /**
     * <p>
     * Shows the text of a file in a JTextArea
     * </p>
     * @param file File to be shown
     * @param textArea JTextArea to include the text
     */
    private void showText(File file, JTextArea textArea) {
        FileReader in = null;
        try {
            in = new FileReader(file);
            textArea.read(in, file.toString());
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            try {
                in.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }

    /**
     * <p>
     * Shows an Option Dialog for confirming if a file should be overwritten
     * (if the file exists)
     * </p>
     * @param file File object to check if it should be overwritten
     * @return boolean This value indicates if the file should be overwritten
     */
    private boolean wantToBeOverwritten(File file) {
        // Check if the file exists
        if (file.exists()) {
            // Do you want to overwrite the file?
            Object[] options = {"Yes",
                "No"
            };
            int n = JOptionPane.showOptionDialog(parent,
                    "File \"" + file.getName() + "\" exists.\nDo you want to overwrite it?",
                    "File exists",
                    JOptionPane.YES_NO_OPTION,
                    JOptionPane.QUESTION_MESSAGE,
                    null,
                    options,
                    options[1]);
            if (n == 1) {
                return false;
            }
        }
        return true;
    }
}

